package modelo.persistencia.JDBC;

import java.util.List;
import modelo.entidades.Acceso;
import modelo.persistencia.AccesoDAO;
import java.sql.*;
import java.util.ArrayList;
import modelo.entidades.AccesoImp;

/**
 *
 * @author jjcamacho
 */
public class AccesoDAOJDBC implements AccesoDAO {

    @Override
    public Acceso read(String pk) throws SQLException, Exception {
        Acceso acceso = null;
        String sql = "select * from accesos where nombre = ?";
        try {
            PreparedStatement stmt = Persistencia.createConnection().prepareStatement(sql);
            stmt.setString(1, pk);
            ResultSet res = stmt.executeQuery();
            if (res.next()) {
                String nombre = res.getString("nombre");
                String descripcion = res.getString("descripcion");
                acceso = new AccesoImp(nombre);
                acceso.setDescripcion(descripcion);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return acceso;
    }

    @Override
    public Acceso read(Acceso entidad) throws SQLException, Exception {
        throw new UnsupportedOperationException("No implementado");
    }

    @Override
    public void create(Acceso acceso) throws SQLException, Exception {
        String sql = "insert into accesos(nombre, descripcion) values (?,?)";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, acceso.getNombre());
            stm.setString(2, acceso.getDescripcion());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void update(Acceso acceso) throws SQLException, Exception {
        String sql = "update accesos set nombre=?, descripcion=? where nombre like ?";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, acceso.getNombre());
            stm.setString(2, acceso.getDescripcion());
            stm.setString(3, acceso.getNombre());
            stm.executeUpdate();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void delete(Acceso acceso) throws SQLException, Exception {
        String sql = "delete from accesos where nombre = ?";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, acceso.getNombre());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public List<Acceso> list() throws SQLException, Exception {
        List<Acceso> accesos = new ArrayList<Acceso>();

        try {
            Statement stmt = Persistencia.createConnection().createStatement();
            ResultSet res = stmt.executeQuery("select * from accesos");
            while (res.next()) {
                String nombre = res.getString("nombre");
                String descripcion = res.getString("descripcion");
                Acceso acceso = new AccesoImp(nombre);
                acceso.setDescripcion(descripcion);
                accesos.add(acceso);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return accesos;
    }
}
